<?php

/*
 * Table/CodeActiviteTable.php
 */

namespace RHX\Model\Table;

use RHX\Model\Object\CodeActivite;
use Zend\Db\Adapter\Adapter;
use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\Sql\Select;
use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Expression;

class CodeActiviteTable extends AbstractTableGateway {

    /**
     * Nom de la Table
     *
     * @var string Nom de la Table
     */
    protected $table = 'rh_code_activite';

    /**
     * Constructeur
     *
     * @param \Zend\Db\Adapter\Adapter $adapter
     */
    public function __construct(Adapter $adapter) {
	$this->adapter			 = $adapter;
	$this->resultSetPrototype	 = new ResultSet();
	$this->resultSetPrototype->setArrayObjectPrototype(new CodeActivite());
	$this->initialize();
    }

    /**
     * Récupérer tous les Codes Activités
     *
     * @param type $order
     * @return Collection
     */
    public function getAll($order = 'id ASC', $all = false) {
	return $this->select(function(Select $select) use($order, $all) {
			    $select->order($order);
			    if ($all == false) {
				$where = new \Zend\Db\Sql\Where();
				$where->greaterThanOrEqualTo('actif', 0);
				$select->where($where);
			    }
			});
    }

    /**
     * Récupérer les COdes d'activités par Page
     *
     * @param type $order
     * @param type $page
     * @param type $perPage
     * @return type
     */
    public function getCodes($order = 'id ASC', $page = 1, $perPage = 30) {
	return $this->select(function(Select $select) use($order, $page, $perPage) {
			    $select->order($order);
			    $offset = ($page - 1) * $perPage;
			    $select->offset($offset);
			    $select->limit($perPage);
			    $where	 = new \Zend\Db\Sql\Where();
			    $where->greaterThanOrEqualTo('actif', 0);
			    $select->where($where);
			});
    }

    /**
     * Récupérer certains codes activités
     * Enlevé de la liste : Retard, Départ Anticipé, Transfert Entrant et Sortant
     *
     * @param int $ancienneté Année d'ancienneté
     * @return type
     */
    public function getSomeCodes($anciennete) {
	return $this->select(function(Select $select) use($anciennete) {
			    $where = new \Zend\Db\Sql\Where();
			    if ($anciennete < 1) {
				$where->equalTo('actif', 0);
			    }
			    else {
				$where->equalTo('actif', 0);
				$where->or->equalTo('actif', 1);
			    }
			    $select->where($where);
			    //$select->order('code ASC');
			});
    }

    /**
     * Récupérer les codes utiles aux plannings type
     * 
     * @return type
     */
    public function getTemplateCodes() {
	return $this->select(function(Select $select) {
			    $where = new \Zend\Db\Sql\Where();
			    $where->equalTo('template', 1);
			    $select->where($where);
			});
    }

    /**
     * Récupérer un Code d'activité
     *
     * @param type $id
     * @return type
     * @throws \Exception
     */
    public function get($id) {
	$row = $this->select(array('id' => $id))
		->current();
	if (!$row)
	    throw new \Exception("Erreur 31 : Le Code d'Activité #$id n'a pas été trouvé");

	return $row;
    }

    /**
     * Sauvegarder un Code Activité
     *
     * @param \RHX\Model\Object\CodeActivite $code
     * @return type
     * @throws \Exception
     */
    public function save(CodeActivite $code) {
	$data = array(
	    'code'		 => $code->code,
	    'libelle'	 => $code->libelle,
	    'couleur'	 => $code->couleur,
	    'description'	 => $code->description,
	);
	$id	 = (int) $code->id;
	if ($id == 0) {
	    $this->insert($data);

	    return $this->lastInsertValue;
	}
	elseif ($this->get($id)) {
	    $this->update($data, array('id' => $id));

	    return $id;
	}
	else {
	    throw new \Exception("Erreur 32 : Le Code d'Activité #$id n'a pas été sélectionné");
	}
    }

    /**
     * Récupérer la liste de tous les codes d'activités dans un tableau Associatif
     *
     * @return array
     */
    public function getSelectList() {
	$rows	 = $this->select();
	$ret	 = array();
	foreach ($rows as $c) {
	    $ret[$c->id] = html_entity_decode('[' . $c->code . '] - ' . $c->libelle);
	}

	return $ret;
    }

    public function erase($id) {
	return $this->delete(array('id' => $id));
    }

}

?>
